/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package petstore.view.action.atendimento;

import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.DynaValidatorActionForm;
import petstore.view.action.*;
import petstore.business.IAtendimentoFacade;
import petstore.model.Pesagem;
import petstore.model.Animal;
import petstore.model.Atendimento;

/**
 *
 * @author Tom Hayden
 */
public class ProntuarioPesagemAction extends CustomDispatchAction {

    private IAtendimentoFacade atendimentoFacade;
    
    public void setAtendimentoFacade(IAtendimentoFacade atendimentoFacade) {
        this.atendimentoFacade = atendimentoFacade;
    }

    public ActionForward novo(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        request.setAttribute("pesagem", null);
        return mapping.findForward("mesmaPagina");
    }
    
    public ActionForward selecionarPesagem(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        DynaValidatorActionForm f = (DynaValidatorActionForm) form;
        request.setAttribute("pesagem", this.getPesagemFromSession((Integer)f.get("id"), request));
        return mapping.findForward("mesmaPagina");
    }
    
    public ActionForward salvar(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        DynaValidatorActionForm f = (DynaValidatorActionForm) form;
        ActionErrors errors = f.validate(mapping, request);

        if (errors.isEmpty()) {
            Pesagem pesagem = this.getPesagem(f, request);
            Integer idPesagem = null;
            if (pesagem.getId() != null) {
                idPesagem = this.atendimentoFacade.alterarPesagem(pesagem);
            } else {
                idPesagem = this.atendimentoFacade.incluirPesagem(pesagem);
            }
            pesagem = this.atendimentoFacade.getPesagem(idPesagem);
            request.setAttribute("pesagem", pesagem);
            request.getSession().setAttribute("pesagens", this.atendimentoFacade.listarPesagemPorAnimal(pesagem.getAnimal()));
            request.setAttribute("msgSucesso", "true");
        } else {
            request.setAttribute(Globals.ERROR_KEY, errors);
            return mapping.getInputForward();
        }

        return mapping.findForward("mesmaPagina");

    }

    private Pesagem getPesagem(DynaValidatorActionForm f, HttpServletRequest request) {
        Pesagem pesagem = null;
        Integer id = (Integer) f.get("id");
        if (id == null || id.intValue() == 0) {
            pesagem = new Pesagem();
            Animal animal = (Animal)request.getSession().getAttribute("animal");
            pesagem.setAnimal(animal);
            Atendimento atendimento = (Atendimento) request.getSession().getAttribute("atendimento");
            pesagem.setDataPesagem(atendimento.getDataHoraAtendimento());
        } else {
            pesagem = this.getPesagemFromSession(id, request);
        }
        pesagem.setPeso((Double)f.get("peso"));
        return pesagem;
    }

    private Pesagem getPesagemFromSession(Integer idPesagem, HttpServletRequest request) {
        Pesagem result = null;
        List<Pesagem> pesagens = (List<Pesagem>) request.getSession().getAttribute("pesagens");
        for (Pesagem pesagem : pesagens) {
            if (pesagem.getId().equals(idPesagem)) {
                result = pesagem;
                break;
            }
        }
        return result;
    }

}
